package cliente.vista;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.GroupLayout.Alignment;

import cliente.controle.Criptografa;
import cliente.controle.GerenteControlador;
import cliente.modelo.Gerente;

public class TrocarSenhaGerenteView {

	private JFrame tela;
	private JPanel painel;
	private JLabel clienteMensagem;
	private JLabel senhaAntiga;
	private JLabel senhaNova;
	private JLabel senhaNovaConfirmacao;
	private JPasswordField senhaAntigaCampo;
	private JPasswordField senhaNovaCampo;
	private JPasswordField senhaNovaConfirmacaoCampo;
	private JButton trocar;
	private JButton cancela;
	private ActionListener ouvinte;
	private Gerente gerente;

	public void iniciaTrocaSenha(Gerente gerente) {
		this.gerente = gerente;
		ouvinte = new acao();
		tela = new JFrame();
		tela.setResizable(false);
		tela.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		tela.setBounds(500, 300, 300, 200);
		tela.setTitle("Trocar Senha Gerente");
		painel = new JPanel();

		GroupLayout layout = new GroupLayout(painel);
		painel.setLayout(layout);

		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);

		clienteMensagem = new JLabel(gerente.getNome()
				+ " digite o pedido abaixo:");
		senhaAntiga = new JLabel("Senha Antiga: ");
		senhaNova = new JLabel("Senha Nova: ");
		senhaNovaConfirmacao = new JLabel("Confirmacão da Senha Nova: ");
		senhaAntigaCampo = new JPasswordField();
		senhaNovaCampo = new JPasswordField();
		senhaNovaConfirmacaoCampo = new JPasswordField();
		trocar = new JButton("Trocar");
		trocar.addActionListener(ouvinte);
		cancela = new JButton("Cancelar");
		cancela.addActionListener(ouvinte);

		organizaFields(layout);

		tela.add(clienteMensagem, BorderLayout.NORTH);
		tela.add(painel, BorderLayout.CENTER);
		tela.setVisible(true);
	}

	private void criaGruposVerticais(GroupLayout layout) {
		GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(senhaAntiga).addComponent(senhaAntigaCampo));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(senhaNova).addComponent(senhaNovaCampo));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(senhaNovaConfirmacao).addComponent(
						senhaNovaConfirmacaoCampo));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(trocar).addComponent(cancela));
		layout.setVerticalGroup(vGroup);
	}

	private void criaGruposHorizontais(GroupLayout layout) {
		GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
		hGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(senhaAntiga).addComponent(senhaNova)
				.addComponent(senhaNovaConfirmacao).addComponent(trocar));
		hGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(senhaAntigaCampo).addComponent(senhaNovaCampo)
				.addComponent(senhaNovaConfirmacaoCampo).addComponent(cancela));
		layout.setHorizontalGroup(hGroup);
	}

	private void organizaFields(GroupLayout layout) {
		criaGruposHorizontais(layout);
		criaGruposVerticais(layout);
	}

	class acao implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {
			if (arg0.getSource() == cancela) {
				tela.dispose();
			}
			if (arg0.getSource() == trocar) {
				if (String.copyValueOf(senhaNovaCampo.getPassword()).equals(
						String.copyValueOf(senhaNovaConfirmacaoCampo
								.getPassword())))// &&
													// Criptografa.md5(String.copyValueOf(senhaAntigaCampo.getPassword()))
													// == gerente.getSenha())
				{
					if (Criptografa.md5(
							String.copyValueOf(senhaAntigaCampo.getPassword()))
							.equals(gerente.getSenha())) {
						GerenteControlador.atualiza(gerente.getId(), gerente
								.getNome(), gerente.getLogin(), Criptografa
								.md5(String.copyValueOf(senhaNovaCampo
										.getPassword())));
						tela.dispose();
					}
				} else {
					JOptionPane.showMessageDialog(tela, "Senha Não Confere");
				}
			}
		}
	}
}
